<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>

<HEAD>
  <TITLE>Lua 5.4 readme</TITLE>
  <LINK REL="stylesheet" TYPE="text/css" HREF="lua.css">
  <!-- <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-1"> -->
  <STYLE TYPE="text/css">
    blockquote,
    .display {
      border: solid #a0a0a0 2px;
      border-radius: 8px;
      padding: 1em;
      margin: 0px;
    }

    .display {
      word-spacing: 0.25em;
    }

    dl.display dd {
      padding-bottom: 0.2em;
    }

    tt,
    kbd,
    code {
      font-size: 12pt;
    }
  </STYLE>
</HEAD>

<BODY>

  <H1>
    <A HREF="http://www.lua.org/"><IMG SRC="logo.gif" ALT="Lua"></A>
    Welcome to Lua 5.4
  </H1>

  <DIV CLASS="menubar">
    <A HREF="#about">关于</A>
    &middot;
    <A HREF="#install">安装</A>
    &middot;
    <A HREF="#changes">版本变化</A>
    &middot;
    <A HREF="#license">许可</A>
    &middot;
    <A HREF="contents.html">参考手册</A>
  </DIV>

  <H2><A NAME="about">关于Lua</A></H2>
  <P>
    Lua是一种强大、高效、轻量级、可嵌入的脚本语言，由巴西里约热内卢天主教大学（<A HREF="http://www.puc-rio.br/">PUC-Rio</A>）的一个<A
      HREF="http://www.lua.org/authors.html">团队</A>开发。
    Lua是<A HREF="#license">自由软件</A>，被世界各地的<A HREF="http://www.lua.org/uses.html">许多产品和项目</A>所使用。
  </P>

  <P> Lua的<A HREF="http://www.lua.org/">官方网站</A>提供了关于Lua的完整信息，包括一份<A HREF="http://www.lua.org/about.html">执行摘要</A>和更新的<A
      HREF="http://www.lua.org/docs.html">文档</A>，特别是<A HREF="http://www.lua.org/manual/5.4/">参考手册</A>。
    请注意，这些在线资源可能与本软件包中提供的<A HREF="contents.html">本地副本</A>略有不同。
  </P>

  <H2><A NAME="install">安装Lua</A></H2>
  <P>
    Lua通过<A HREF="http://www.lua.org/ftp/">源码</A>进行发布。
    在使用之前您需要构建它。
    构建Lua应该很简单，因为Lua是纯ANSI C实现，并且能在有ANSI C编译器的所有已知平台上无需修改即可编译。
    Lua也可以无修改的编译为C++。
    下面给出的构建Lua的说明适用于Unix-like平台，如Linux和Mac OS X。
    请参见
    <A HREF="#other">其它系统的说明</A>
    和
    <A HREF="#customization">定制选项</A>。
  </P>

  <P>
    如果您没有时间或者兴趣自己编译Lua，可以从<A HREF="http://lua-users.org/wiki/LuaBinaries">LuaBinaries</A>
    下载已编译好的二进制文件。
  </P>

  <H3>构建Lua</H3>
  <P>
    在大多数Unix-like平台，只需执行<KBD>make</KBD>，
    详情如下：
  </P>

  <OL>
    <LI>
      打开一个终端窗口并且移动到Lua源代码的顶层目录，该目录的名称为<TT>lua-5.4.6</TT>。
      那里的<TT>Makefile</TT>控制了构建过程和安装过程。
      <P />
    </LI>
    <LI>
      执行 "<KBD>make</KBD>". <TT>Makefile</TT>会猜测您的平台并为其构建Lua
      <P />
    </LI>
    <LI>
      如果猜测失败，执行"<KBD>make help</KBD>"并查看您的平台是否列出，目前支持的平台有：
      <P />
      <P CLASS="display">
        guess aix bsd c89 freebsd generic ios linux linux-readline macosx mingw posix solaris
      </P>
      <P />
      如果您的平台在上面列出，执行"<KBD>make xxx</KBD>", xxx是您的平台名
      <P />
      如果您的平台没有列出，请尝试最接近的平台，或者按照posix, generic, c89的顺序尝试
      <P />
    </LI>
    <LI>
      编译只需要几秒钟，并在<TT>src</TT>目录下产生三个文件：lua（解释器）、luac（编译器）和liblua.a（库）。
      <P />
    </LI>
    <LI>
      检查Lua是否构建正确，执行"<KBD>make test</KBD>"。这将运行解释器并且打印Lua的版本信息。
    </LI>
  </OL>

  <P> 如果您正在运行Linux，请尝试使用"<KBD>make linux-readline</KBD>"命令构建具有便捷的行编辑和历史记录功能的交互式Lua解释器。
    如果出现编译错误，请确保已安装<TT>readline</TT>开发包（可能命名为<TT>libreadline-dev</TT>或<TT>readline-devel</TT>）。
    如果之后出现链接错误，请尝试"<KBD>make linux-readline MYLIBS=-ltermcap</KBD>"。
  </P>
  <H3>安装Lua</H3>
  <P> 一旦Lua构建完成，您可能希望将其安装在系统中的官方位置。 在这种情况下，请执行"<KBD>make install</KBD>"命令。官方位置和文件安装的方式在<TT>Makefile</TT>中定义。
    您可能需要适当的权限来安装文件，因此可能需要执行"<KBD>sudo make install</KBD>"。 </P>
  <P> 要一步到位构建和安装Lua，请执行"<KBD>make all install</KBD>"命令， 或者"<KBD>make xxx install</KBD>"，其中xxx是您的平台名称。 </P>

  <P> 在构建完成后，要在本地安装Lua，请执行"<KBD>make local</KBD>"命令。
    这将在名为<TT>install</TT>的目录下创建子目录<TT>bin</TT>、<TT>include</TT>、<TT>lib</TT>、<TT>man</TT>、<TT>share</TT>，
    并按下面所列的方式安装Lua。
    如果要在本地安装Lua到其他目录，请执行"<KBD>make install INSTALL_TOP=xxx</KBD>"命令，其中xxx为您选择的目录。
    安装将从<TT>src</TT>和<TT>doc</TT>目录开始，因此请注意<TT>INSTALL_TOP</TT>不是绝对路径的情况。
  </P>

  <DL CLASS="display">
    <DT>
      bin:
    <DD>
      lua luac
    <DT>
      include:
    <DD>
      lua.h luaconf.h lualib.h lauxlib.h lua.hpp
    <DT>
      lib:
    <DD>
      liblua.a
    <DT>
      man/man1:
    <DD>
      lua.1 luac.1
  </DL>

  <P>
    对于开发工作来说，这些是您唯一需要的目录。如果您只想运行Lua程序，您只需要<TT>bin</TT>和<TT>man</TT>中的文件。如果您需要在C或C++程序中嵌入Lua，那么您还需要<TT>include</TT>和<TT>lib</TT>中的文件。
  </P>

  <H3><A NAME="customization">定制选项</A></H3>
  <P> 通过编辑文件，可以定制三种类型的东西： </P>
  <UL>
    <LI> 在哪里以及如何安装Lua——编辑<TT>Makefile</TT>。
    <LI> 如何构建Lua——编辑<TT>src/Makefile</TT>。
    <LI> Lua特性——编辑<TT>src/luaconf.h</TT>。
  </UL>
  <P> 实际上，您不需要编辑Makefile，因为在调用make时可以在命令行中设置相关变量。 然而，最好还是编辑并保存Makefile，以记录您所做的更改。 </P>

  <P>
    另一方面，如果您需要定制一些Lua特性，您需要再构建和安装Lua之前修改<TT>src/luaconf.h</TT>
    这个编辑过的文件将在下一次构建时被使用。并且他将被用于您构建的任何Lua客户端，以确保一致性。
    对于那些对Lua源代码有深入了解的开发人员来说，还可以进一步定制Lua。
  </P>

  <H3><A NAME="other">在其他系统构建Lua</A></H3>
  <P>
    如果您不使用常用的Unix工具，那么构建Lua的方法取决于您使用的编译器。
    您需要为您的编译器创建用于构建库、解释器和编译器的项目(或您的编译器所使用的东西)，如下所示:

  <DL CLASS="display">
    <DT>
      library:
    <DD>
      lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c
      lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c
      lauxlib.c lbaselib.c lcorolib.c ldblib.c liolib.c lmathlib.c loadlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c
      linit.c
    <DT>
      interpreter:
    <DD>
      library, lua.c
    <DT>
      compiler:
    <DD>
      library, luac.c
  </DL>

  <P>
    为了在您的程序中将Lua作为库来使用，您需要知道怎么在您的编译器中创建和使用库。
    此外，为了动态加载C库，您需要知道怎么创建动态库，以及确保Lua API函数对这些动态库可访问。
    但是，<EM>不要</EM>将Lua库链接到每个动态库。对于Unix，我们建议将Lua库静态链接到主机程序，并将其符号导出以进行动态链接；
    <TT>src/Makefile</TT>为Lua解释器做了这个。对于Windows，我们建议将Lua作为一个DLL。在任何情况，luac编译器应该静态链接。
  </P>

  <P>如上文所述，您可以在构建Lua之前编辑<TT>src/luaconf.h</TT>来自定义一些特性。</P>

  <H2><A NAME="changes">Lua 5.3后的改变</A></H2>
  <P>
    这里介绍一些Lua 5.4中的主要改变，

    <A HREF="contents.html">参考手册</A>
    列出了必须介绍的
    <A HREF="manual.html#8">不兼容</A>变化。
  </P>

  <H3>主要变化</H3>
  <UL>
    <LI> 新的分代式GC</LI>
    <LI> to-be-closed变量</LI>
    <LI> const变量</LI>
    <LI> userdata可以有多个user value</LI>
    <LI> math.random的新实现</LI>
    <LI> 警告系统</LI>
    <LI> 函数参数和返回值的调试(debug)信息</LI>
    <LI> 整数'for'循环的新语义</LI>
    <LI> 'string.gmatch'的可选'init'参数</LI>
    <LI> 新函数'lua_resetthread'和'coroutine.close'</LI>
    <LI> 字符串到数字的强制转换转移到string库中</LI>
    <LI> 分配函数允许在收缩内存块时失败</LI>
    <LI> 'string.format'的新格式'%p'</LI>
    <LI> Utf8库接受最多2^31的码点</LI>
  </UL>

  <H2><A NAME="license">License</A></H2>
  <P>
    <A HREF="http://www.opensource.org/docs/definition.php">
      <IMG SRC="osi-certified-72x60.png" ALIGN="right" ALT="[osi certified]" STYLE="padding-left: 30px ;">
    </A>
    Lua is free software distributed under the terms of the
    <A HREF="http://www.opensource.org/licenses/mit-license.html">MIT license</A>
    reproduced below;
    it may be used for any purpose, including commercial purposes,
    at absolutely no cost without having to ask us.

    The only requirement is that if you do use Lua,
    then you should give us credit by including the appropriate copyright notice somewhere in your product or its
    documentation.

    For details, see
    <A HREF="http://www.lua.org/license.html">this</A>.

  <BLOCKQUOTE STYLE="padding-bottom: 0em">
    Copyright &copy; 1994&ndash;2023 Lua.org, PUC-Rio.

    <P>
      Permission is hereby granted, free of charge, to any person obtaining a copy
      of this software and associated documentation files (the "Software"), to deal
      in the Software without restriction, including without limitation the rights
      to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      copies of the Software, and to permit persons to whom the Software is
      furnished to do so, subject to the following conditions:
    </P>

    <P>
      The above copyright notice and this permission notice shall be included in
      all copies or substantial portions of the Software.
    </P>

    <P>
      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
      THE SOFTWARE.
    </P>
  </BLOCKQUOTE>
  <P>

  <P CLASS="footer">
    Last update:
    Tue May 2 20:08:55 UTC 2023
  </P>
  <!--
Last change: revised for Lua 5.4.6
-->

</BODY>

</HTML>